package com.nnnu.wsnackshop.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nnnu.wsnackshop.pojo.entity.Reviews;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nnnu.wsnackshop.pojo.vo.ReviewVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 评价 服务类
 * </p>
 *
 * @author zk
 * @since 2025-05-14
 */
public interface IReviewsService extends IService<Reviews> {

        /**
         * 根据商品ID查询评价列表
         * 
         * @param productId 商品ID
         * @param limit     限制返回数量
         * @return 评价VO列表
         */
        List<ReviewVO> listReviewsByProduct(Integer productId, Integer limit);

        /**
         * 创建商品评价
         *
         * @param userId    用户ID
         * @param productId 商品ID
         * @param orderId   订单ID
         * @param skuId     规格ID
         * @param rating    评分（1-5星）
         * @param comment   评价内容
         * @param images    图片数组（JSON字符串）
         * @return 创建的评价对象
         */
        ReviewVO createReview(Integer userId, Integer productId, Long orderId, Integer skuId, Integer rating,
                        String comment, String images);

        /**
         * 更新商品评价
         *
         * @param reviewId 评价ID
         * @param userId   用户ID
         * @param rating   评分（1-5星）
         * @param comment  评价内容
         * @param images   图片数组（JSON字符串）
         * @return 更新后的评价对象
         */
        ReviewVO updateReview(Integer reviewId, Integer userId, Integer rating, String comment, String images);

        /**
         * 删除商品评价
         *
         * @param reviewId 评价ID
         * @param userId   用户ID
         * @return 是否删除成功
         */
        boolean deleteReview(Integer reviewId, Integer userId);

        /**
         * 获取用户的评价列表
         *
         * @param userId 用户ID
         * @param page   页码
         * @param size   每页大小
         * @return 用户评价列表
         */
        List<ReviewVO> listUserReviews(Integer userId, Integer page, Integer size);

        /**
         * 根据订单ID查询评价
         *
         * @param orderId 订单ID
         * @return 该订单的评价列表
         */
        List<ReviewVO> listReviewsByOrder(Long orderId);

        /**
         * 根据订单ID和商品ID查询评价
         *
         * @param orderId   订单ID
         * @param productId 商品ID
         * @return 评价对象
         */
        ReviewVO getReviewByOrderAndProduct(Long orderId, Integer productId);

        /**
         * 分页获取商品评价
         *
         * @param productId 商品ID
         * @param page      页码
         * @param pageSize  每页大小
         * @param minRating 最小评分
         * @param maxRating 最大评分
         * @param hasImages 是否有图片
         * @return 分页评价结果
         */
        Page<ReviewVO> pageReviewsByProduct(Integer productId, Integer page, Integer pageSize,
                        Integer minRating, Integer maxRating, Boolean hasImages);

        /**
         * 获取商品评价统计数据
         *
         * @param productId 商品ID
         * @return 评价统计数据
         */
        Map<String, Object> getReviewStats(Integer productId);

        /**
         * 获取评价详情
         * @param id 评价ID
         * @return 评价详情
         */
        ReviewVO getReviewDetail(Integer id);
}
